package com.hardroid.workload.workcalc;

import java.util.HashMap;

public class Questionaire {

	/*
	 * Attributes
	 */
	/*
	 * faktor kelonggaran
	 * ===================================================================
	 */
	/**
	 * Tenaga yang dikeluarkan
	 * 
	 */
	public int tenagaPos;
//	public static final String TENAGA_PILIHAN_1 = "Dapat diabaikan";
//	public static final String TENAGA_PILIHAN_2 = "Sangat Ringan";
//	public static final String TENAGA_PILIHAN_3 = "Ringan";
//	public static final String TENAGA_PILIHAN_4 = "Sedang";
//	public static final String TENAGA_PILIHAN_5 = "Berat";
//	public static final String TENAGA_PILIHAN_6 = "Sangat Berat";
//	public static final String TENAGA_PILIHAN_7 = "Luar Biasa Berat";
//	public static final int TENAGA_NILAI_PRIA_1 = 0;
//	public static final int TENAGA_NILAI_PRIA_2 = 3;
//	public static final int TENAGA_NILAI_PRIA_3 = 7;
//	public static final int TENAGA_NILAI_PRIA_4 = 12;
//	public static final int TENAGA_NILAI_PRIA_5 = 19;
//	public static final int TENAGA_NILAI_PRIA_6 = 30;
	public static final int TENAGA_NILAI_PRIA[] = { 0, 3, 7, 12, 19, 30 };
	// tenaga nilai pria 7 = diisi sendiri
//	public static final int TENAGA_NILAI_WANITA_1 = 0;
//	public static final int TENAGA_NILAI_WANITA_2 = 3;
//	public static final int TENAGA_NILAI_WANITA_3 = 7;
//	public static final int TENAGA_NILAI_WANITA_4 = 16;
	public static final int TENAGA_NILAI_WANITA[] = { 0, 3, 7, 16 };
	// tenaga nilai wanita 5 - 7 = diisi sendiri

	/**
	 * Sikap kerja
	 */
	public int sikapKerjaPos;
//	public static final String SIKAP_KERJA_PILIHAN_1 = "Duduk";
//	public static final String SIKAP_KERJA_PILIHAN_2 = "Berdiri di atas dua kaki";
//	public static final String SIKAP_KERJA_PILIHAN_3 = "Berdiri di atas satu kaki";
//	public static final String SIKAP_KERJA_PILIHAN_4 = "Berbaring";
//	public static final String SIKAP_KERJA_PILIHAN_5 = "Membungkuk";
//	public static final float SIKAP_KERJA_NILAI_1 = 0;
//	public static final float SIKAP_KERJA_NILAI_2 = 1;
//	public static final float SIKAP_KERJA_NILAI_3 = 2.5f;
//	public static final float SIKAP_KERJA_NILAI_4 = 3;
//	public static final float SIKAP_KERJA_NILAI_5 = 4;
	public static final float SIKAP_KERJA_NILAI[] = { 0, 1, 2.5f, 3, 4 };
	/**
	 * Gerakan kerja
	 */
	public int gerakanKerPos;
//	public static final String GERAKAN_KERJA_PILIHAN_1 = "Normal";
//	public static final String GERAKAN_KERJA_PILIHAN_2 = "Agak terbatas";
//	public static final String GERAKAN_KERJA_PILIHAN_3 = "Sulit";
//	public static final String GERAKAN_KERJA_PILIHAN_4 = "Pada anggota-anggota terbatas";
//	public static final String GERAKAN_KERJA_PILIHAN_5 = "Seluruh anggota-anggota terbatas";
//	public static final int GERAKAN_KERJA_NILAI_1 = 0;
//	public static final int GERAKAN_KERJA_NILAI_2 = 1;
//	public static final int GERAKAN_KERJA_NILAI_3 = 2;
//	public static final int GERAKAN_KERJA_NILAI_4 = 5;
//	public static final int GERAKAN_KERJA_NILAI_5 = 10;
	public static final int GERAKAN_KERJA_NILAI[] = { 0, 1, 2, 5, 10 };
	/**
	 * Kelelahan mata
	 */
	public int kelelahanMataPos;
//	public static final String KELELAHAN_MATA_PILIHAN_1 = "Pandangan terputus-putus";
//	public static final String KELELAHAN_MATA_PILIHAN_2 = "Pandangan terus-menerus";
//	public static final String KELELAHAN_MATA_PILIHAN_3 = "Pandangan terus-menerus dengan fokus berubah";
//	public static final String KELELAHAN_MATA_PILIHAN_4 = "Pandangan terus-menerus dengan fokus tetap";
//	public static final float KELELAHAN_MATA_CAHAYA_BAIK_NILAI_1 = 0;
//	public static final float KELELAHAN_MATA_CAHAYA_BAIK_NILAI_2 = 6;
//	public static final float KELELAHAN_MATA_CAHAYA_BAIK_NILAI_3 = 7.5f;
//	public static final float KELELAHAN_MATA_CAHAYA_BAIK_NILAI_4 = 19;
//	public static final float KELELAHAN_MATA_CAHAYA_BURUK_NILAI_1 = 1;
//	public static final float KELELAHAN_MATA_CAHAYA_BURUK_NILAI_2 = 7;
//	public static final float KELELAHAN_MATA_CAHAYA_BURUK_NILAI_3 = 8;

	public static final float KELELAHAN_MATA_CAHAYA_BAIK[] = { 0, 6, 7.5f, 19 };
	public static final float KELELAHAN_MATA_CAHAYA_BURUK[] = { 1, 7, 8 };

	// kelelahan mata cahaya buruk nilai pilihan ke-4 tidak ada
	/**
	 * Kondisi cahaya saat itu, apakah cahaya Baik == true? atau cahaya Baik ==
	 * false?
	 */
	public boolean cahayaBaik;
	/**
	 * Temperatur udara
	 */
	public int temperaturPos;
//	public static final String TEMPERATUR_PILIHAN_1 = "Di bawah 0 C";
//	public static final String TEMPERATUR_PILIHAN_2 = "0 - 13 C";
//	public static final String TEMPERATUR_PILIHAN_3 = "13 - 22 C";
//	public static final String TEMPERATUR_PILIHAN_4 = "22 - 30 C";
//	public static final String TEMPERATUR_PILIHAN_5 = "30 - 38 C";
//	public static final String TEMPERATUR_PILIHAN_6 = "Di atas 38 C";
//	public static final int TEMPERATUR_NILAI_1 = 10;
//	public static final int TEMPERATUR_NILAI_2 = 5;
//	public static final int TEMPERATUR_NILAI_3 = 2;
//	public static final int TEMPERATUR_NILAI_4 = 0;
//	public static final int TEMPERATUR_NILAI_5 = 10;
//	public static final int TEMPERATUR_NILAI_6 = 40;
	public static final int TEMPERATUR_NILAI[] = { 10, 5, 2, 0, 10, 40 };
	/**
	 * Keadaan atmosfer
	 */
	public int atmosferPos;
//	public static final String ATMOSFER_PILIHAN_1 = "Baik";
//	public static final String ATMOSFER_PILIHAN_2 = "Cukup Baik";
//	public static final String ATMOSFER_PILIHAN_3 = "Kurang Baik";
//	public static final String ATMOSFER_PILIHAN_4 = "Buruk";
//	public static final int ATMOSFER_NILAI_1 = 0;
//	public static final int ATMOSFER_NILAI_2 = 1;
//	public static final int ATMOSFER_NILAI_3 = 5;
//	public static final int ATMOSFER_NILAI_4 = 10;
	public static final int ATMOSFER_NILAI[] = { 0, 1, 5, 10 };
	/**
	 * Keadaan lingkungan
	 */
	public int keadaanLingPos;
//	public static final String KEADAAN_LING_PILIHAN_1 = "Sehat, kebisingan rendah";
//	public static final String KEADAAN_LING_PILIHAN_2 = "Siklus kerja berulang 5-10 detik";
//	public static final String KEADAAN_LING_PILIHAN_3 = "Siklus kerja berulang 0-5 detik";
//	public static final String KEADAAN_LING_PILIHAN_4 = "Sangat bising";
//	public static final String KEADAAN_LING_PILIHAN_5 = "Ada faktor menurunkan kualitas";
//	public static final String KEADAAN_LING_PILIHAN_6 = "Terasa getaran di lantai";
//	public static final String KEADAAN_LING_PILIHAN_7 = "Keadaan abnormal (bunyi, kebersihan)";
//	public static final int KEADAAN_LING_NILAI_1 = 0;
//	public static final int KEADAAN_LING_NILAI_2 = 1;
//	public static final int KEADAAN_LING_NILAI_3 = 2;
//	public static final int KEADAAN_LING_NILAI_4 = 3;
//	public static final int KEADAAN_LING_NILAI_5 = 4;
//	public static final int KEADAAN_LING_NILAI_6 = 5;
//	public static final int KEADAAN_LING_NILAI_7 = 6;
	public static final int KEADAAN_LINGKUNGAN_NILAI[] = { 0, 1, 2, 3, 4, 5, 6 };
	/**
	 * Hambatan tak terhindarkan, kisaran angka 0 - 50%
	 */
	public int hambatanValue;
	/**
	 * batas minimum dari kisaran nilai {@link Questionaire#hambatanValue},
	 * dalam percentage
	 */
	public static final int HAMBATAN_MIN_PERCENTAGE = 0;
	/**
	 * batas maksimum dari kisaran nilai {@link Questionaire#hambatanValue},
	 * dalam percentage
	 */
	public static final int HAMBATAN_MAX_PERCENTAGE = 50;
	/**
	 * Nilai kebutuhan pribadi pria untuk menghitung niali kelonggaran, dalam
	 * percentage
	 */
	public static final float KEBUTUHAN_PRIBADI_PRIA = 2.5f;
	/**
	 * Nilai kebutuhan pribadi wanita untuk menghitung niali kelonggaran, dalam
	 * percentage
	 */
	public static final float KEBUTUHAN_PRIBADI_WANITA = 5f;
	/*
	 * Nilai kelonggaran data observasi hari itu = A + B + C + D + G + H +
	 * kebutuhan pribadi (sesuai gender)
	 */

	/*
	 * penyesuaian objektif
	 * ======================================================================
	 */

	/**
	 * P1 - tingkat kecepatan kerja, dalam percentage
	 */
	public int tingkatKecepatanKerjaPos;
//	public static final String TINGKAT_KECEPATAN_KERJA_PILIHAN_1 = "0 %";
//	public static final String TINGKAT_KECEPATAN_KERJA_PILIHAN_2 = "50 %";
//	public static final String TINGKAT_KECEPATAN_KERJA_PILIHAN_3 = "75 %";
//	public static final String TINGKAT_KECEPATAN_KERJA_PILIHAN_4 = "100 %";
//	public static final String TINGKAT_KECEPATAN_KERJA_PILIHAN_5 = "125 %";
//	public static final String TINGKAT_KECEPATAN_KERJA_PILIHAN_6 = "150 %";
//	public static final int TINGKAT_KECEPATAN_KERJA_NILAI_1 = 0;
//	public static final int TINGKAT_KECEPATAN_KERJA_NILAI_2 = 50;
//	public static final int TINGKAT_KECEPATAN_KERJA_NILAI_3 = 75;
//	public static final int TINGKAT_KECEPATAN_KERJA_NILAI_4 = 100;
//	public static final int TINGKAT_KECEPATAN_KERJA_NILAI_5 = 125;
//	public static final int TINGKAT_KECEPATAN_KERJA_NILAI_6 = 150;
	public static final int TINGKAT_KECEPATAN_KERJA_NILAI[] = { 0, 50, 75, 100,
			125, 150 };
	/*
	 * Untuk menghitung nilai P2
	 */
	/**
	 * Anggota badan terpakai
	 */
	public int anggotaBadanPos;
//	public static final String ANGGOTA_BADAN_PILIHAN_1 = "Jari";
//	public static final String ANGGOTA_BADAN_PILIHAN_2 = "Pergelangan tangan dari jari";
//	public static final String ANGGOTA_BADAN_PILIHAN_3 = "Lengan bawah, pergelangan tanga dari jari";
//	public static final String ANGGOTA_BADAN_PILIHAN_4 = "Lengan atas, lengan bawah, dan seterusnya";
//	public static final String ANGGOTA_BADAN_PILIHAN_5 = "Badan";
//	public static final String ANGGOTA_BADAN_PILIHAN_6 = "Mengangkat beban dari lantai dengan kaki";
//	public static final int ANGGOTA_BADAN_NILAI_1 = 0;
//	public static final int ANGGOTA_BADAN_NILAI_2 = 1;
//	public static final int ANGGOTA_BADAN_NILAI_3 = 2;
//	public static final int ANGGOTA_BADAN_NILAI_4 = 5;
//	public static final int ANGGOTA_BADAN_NILAI_5 = 8;
//	public static final int ANGGOTA_BADAN_NILAI_6 = 10;
	public static final int ANGGOTA_BADAN_NILAI[] = { 0, 1, 2, 5, 8, 10 };
	/**
	 * Pedal kaki
	 */
	public int pedalKakiPos;
//	public static final String PEDAL_KAKI_PILIHAN_1 = "Tanpa pedal atau dengan satu pedal dengan sumbu di bawah kaki";
//	public static final String PEDAL_KAKI_PILIHAN_2 = "Satu atau dua pedal dengan sumbu tidak di bawah kaki";
//	public static final int PEDAL_KAKI_NILAI_1 = 0;
//	public static final int PEDAL_KAKI_NILAI_2 = 5;
	public static final int PEDAL_KAKI_NILAI[] = { 0, 5 };
	/**
	 * Penggunaan tangan
	 */
	public int penggunaanTanganPos;
//	public static final String PENGGUNAAN_TANGAN_PILIHAN_1 = "Kedua tangan saling bantu atau bergantian";
//	public static final String PENGGUNAAN_TANGAN_PILIHAN_2 = "Kedua tangan mengerjakan hal yang sama pada saat yang bersamaan";
//	public static final int PENGGUNAAN_TANGAN_NILAI_1 = 0;
//	public static final int PENGGUNAAN_TANGAN_NILAI_2 = 5;
	public static final int PENGGUNAAN_TANGAN_NILAI[] = { 0, 5 };
	/**
	 * Koordinasi mata dengan tangan
	 */
	public int koordinasiMataPos;
//	public static final String KOORDINASI_MATA_PILIHAN_1 = "Sangat sedikit";
//	public static final String KOORDINASI_MATA_PILIHAN_2 = "Cukup dekat";
//	public static final String KOORDINASI_MATA_PILIHAN_3 = "Konstan dan dekat";
//	public static final String KOORDINASI_MATA_PILIHAN_4 = "Sangat dekat";
//	public static final String KOORDINASI_MATA_PILIHAN_5 = "Lebih kecil dari 0.04 cm";
//	public static final int KOORDINASI_MATA_NILAI_1 = 0;
//	public static final int KOORDINASI_MATA_NILAI_2 = 2;
//	public static final int KOORDINASI_MATA_NILAI_3 = 4;
//	public static final int KOORDINASI_MATA_NILAI_4 = 7;
//	public static final int KOORDINASI_MATA_NILAI_5 = 10;
	public static final int KOORDINASI_MATA_NILAI[] = { 0, 2, 4, 7, 10 };
	/**
	 * Peralatan
	 */
	public int peralatanPos;
//	public static final String PERALATAN_PILIHAN_1 = "Dapat ditangani dengan mudah";
//	public static final String PERALATAN_PILIHAN_2 = "Dengan sedikit kontrol";
//	public static final String PERALATAN_PILIHAN_3 = "Perlu kontrol dan penekanan";
//	public static final String PERALATAN_PILIHAN_4 = "Perlu penanganan dan hati-hati";
//	public static final String PERALATAN_PILIHAN_5 = "Mudah pecah, patah";
//	public static final int PERALATAN_NILAI_1 = 0;
//	public static final int PERALATAN_NILAI_2 = 1;
//	public static final int PERALATAN_NILAI_3 = 2;
//	public static final int PERALATAN_NILAI_4 = 3;
//	public static final int PERALATAN_NILAI_5 = 5;
	public static final int PERALATAN_NILAI[] = { 0, 1, 2, 3, 5 };

	/*
	 * Methods
	 */
	/**
	 * Default Constructor
	 */
	public Questionaire() {
		// TODO Auto-generated constructor stub
		this.anggotaBadanPos = 0;
		this.atmosferPos = 0;
		this.cahayaBaik = true;
		this.gerakanKerPos = 0;
		this.hambatanValue = 0;
		this.keadaanLingPos = 0;
		this.kelelahanMataPos = 0;
		this.koordinasiMataPos = 0;
		this.pedalKakiPos = 0;
		this.penggunaanTanganPos = 0;
		this.peralatanPos = 0;
		this.sikapKerjaPos = 0;
		this.temperaturPos = 0;
		this.tenagaPos = 0;
		this.tingkatKecepatanKerjaPos = 0;
	}

	public Questionaire(Questionaire a) {
		// TODO Auto-generated constructor stub
		this.anggotaBadanPos = a.anggotaBadanPos;
		this.atmosferPos = a.atmosferPos;
		this.cahayaBaik = a.cahayaBaik;
		this.gerakanKerPos = a.gerakanKerPos;
		this.hambatanValue = a.hambatanValue;
		this.keadaanLingPos = a.keadaanLingPos;
		this.kelelahanMataPos = a.kelelahanMataPos;
		this.koordinasiMataPos = a.koordinasiMataPos;
		this.pedalKakiPos = a.pedalKakiPos;
		this.penggunaanTanganPos = a.penggunaanTanganPos;
		this.peralatanPos = a.peralatanPos;
		this.sikapKerjaPos = a.sikapKerjaPos;
		this.temperaturPos = a.temperaturPos;
		this.tenagaPos = a.tenagaPos;
		this.tingkatKecepatanKerjaPos = a.tingkatKecepatanKerjaPos;

	}

	/**
	 * Mendapatkan P1. P1 diperoleh dari tingkat kecepatan kerja
	 * 
	 * @return P1 (dalam persentase / %)
	 */
	public int getP1() {
		
		try {
			return TINGKAT_KECEPATAN_KERJA_NILAI[tingkatKecepatanKerjaPos];
		} catch (Exception e) {
			return TINGKAT_KECEPATAN_KERJA_NILAI[0];
		}
	}

	/**
	 * Mendapatkan P2. P2 diperoleh dari perhitungan
	 * 
	 * @return P2 (dalam persentase / %)
	 */
	public float getP2() {
		int ABT = getAnggotaBadanValue();
		int PK = getPedalKakiValue();
		int PT = getPenggunaanTanganValue();
		int KMDT = getKoordinasiMataDenganTanganValue();
		int P = getPeralatanValue();
//		System.out.println("ABT:"+ABT+",PK:"+PK+",PT:"+PT+",KMDT:"+KMDT+",P:"+P);
		return 1 + ((float)(ABT + PK + PT + KMDT + P)/100);
	}

	public int getAnggotaBadanValue() {
		try {
			return ANGGOTA_BADAN_NILAI[anggotaBadanPos];
		} catch (Exception e) {
			return ANGGOTA_BADAN_NILAI[0];
		}
	}
	
	public int getPedalKakiValue() {
		try {
			return PEDAL_KAKI_NILAI[pedalKakiPos];
		} catch (Exception e) {
			return PEDAL_KAKI_NILAI[0];
		}
	}

	public int getPenggunaanTanganValue() {
		try {
			return PENGGUNAAN_TANGAN_NILAI[penggunaanTanganPos];
		} catch (Exception e) {
			return PENGGUNAAN_TANGAN_NILAI[0];
		}
	}
	public int getKoordinasiMataDenganTanganValue() {
		try {
			return KOORDINASI_MATA_NILAI[koordinasiMataPos];
		} catch (Exception e) {
			return KOORDINASI_MATA_NILAI[0];
		}
	}
	public int getPeralatanValue() {
		try {
			return PERALATAN_NILAI[peralatanPos];
		} catch (Exception e) {
			return PERALATAN_NILAI[0];
		}
	}
	public int getTenagaKeluarValue(boolean isPria) {
		try {
			if (isPria){
				return TENAGA_NILAI_PRIA[tenagaPos];	
			}else{
				return TENAGA_NILAI_WANITA[tenagaPos];
			}
			
		} catch (Exception e) {
			if (isPria){
				return TENAGA_NILAI_PRIA[0];	
			}else{
				return TENAGA_NILAI_WANITA[0];
			}
		}
	}
	public float getSikapKerjaValue() {
		try {
			return SIKAP_KERJA_NILAI[sikapKerjaPos];
		} catch (Exception e) {
			return SIKAP_KERJA_NILAI[0];
		}
	}
	public int getGerakanKerjaValue() {	
		try {
			return GERAKAN_KERJA_NILAI[gerakanKerPos];
		} catch (Exception e) {
			return GERAKAN_KERJA_NILAI[0];
		}		
	}
	public float getKelelahanMataValue() {
		try {
			if (cahayaBaik){
				return KELELAHAN_MATA_CAHAYA_BAIK[kelelahanMataPos];	
			}else{
				return KELELAHAN_MATA_CAHAYA_BURUK[kelelahanMataPos];
			}
			
		} catch (Exception e) {
			if (cahayaBaik){
				return KELELAHAN_MATA_CAHAYA_BAIK[0];	
			}else{
				return KELELAHAN_MATA_CAHAYA_BURUK[0];
			}
		}
	}
	public int getTemperaturValue() {
		try {
			return TEMPERATUR_NILAI[temperaturPos];
		} catch (Exception e) {
			return TEMPERATUR_NILAI[0];
		}
	}
	public int getAtmosferValue() {
		try {
			return ATMOSFER_NILAI[atmosferPos];
		} catch (Exception e) {
			return ATMOSFER_NILAI[0];
		}
	}
	public int getKeadaanLingkunganValue() {
		try {
			return KEADAAN_LINGKUNGAN_NILAI[keadaanLingPos];
		} catch (Exception e) {
			return KEADAAN_LINGKUNGAN_NILAI[0];
		}
	}
	public int getHambatanTakTerhindarValue() {
		try {
			return hambatanValue;
		} catch (Exception e) {
			return 0;
		}
	}
	public boolean getCahayaBaikValue() {
		try {
			return cahayaBaik;
		} catch (Exception e) {
			return true;
		}
	}
	
	/**
	 * Mendapatkan P1 * P2
	 * 
	 * @return P1*P2 (dalam persentase / %)
	 */
	public float getP1xP2() {
//		System.out.println("P1:"+getP1()+",P2:"+getP2()+",P1xP2"+(getP1()*getP2()));
		return getP1() * getP2();
	}

	/**
	 * Mendapatkan nilai kelonggaran
	 * 
	 * @param isMale
	 * @return
	 */
	public float getNilaiKelonggaran(boolean isMale) {
		int A = getTenagaKeluarValue(isMale);
		float B =(float) getSikapKerjaValue();
		int C = getGerakanKerjaValue();
		float D =(float) getKelelahanMataValue();
		float E = (float)getTemperaturValue();
		int F = getAtmosferValue();
		int G = getKeadaanLingkunganValue();
		int H = getHambatanTakTerhindarValue();
		float K =(float) KEBUTUHAN_PRIBADI_WANITA;
		if (isMale) {
			K = KEBUTUHAN_PRIBADI_PRIA;
		}
//		System.out.println("A:"+A +",B:"+B +",C:"+C +",D:"+D +",E:"+E +",F:"+F +",G:"+G +",H:"+H +",K:"+K );
		return (A + B + C + D + E + F + G + H + K);

	}

}
